home *** CD-ROM | disk | FTP | other *** search
Text File | 1997-03-17 | 1.3 KB | 68 lines | [TEXT/CWIE] |
- //
- // Q3AutoObject.h
- //
- // A template class for "smart pointer" QD3D *shared* objects.
- //
- // By James Jennings
- // March 8, 1997
- //
-
- #pragma once
-
- #define explicit
-
- template<class T> // can we restrict T to subclasses of TQ3Object?
- class Q3AutoObject {
- public:
- explicit Q3AutoObject(T inObj = nil) : mObject(inObj)
- { Assert_(inObj==nil || ::Q3Object_IsType(inObj, kQ3ObjectTypeShared) == kQ3True); }
-
- // template <class U>
- Q3AutoObject(Q3AutoObject<T> &rhs) : mObject(rhs.GetRef()) {} // copy constructor
-
- ~Q3AutoObject() { Release(); }
-
- // template <class U>
- Q3AutoObject<T> operator=(Q3AutoObject<T> &rhs)
- {
- if (this != &rhs) Reset(rhs.GetRef());
- return *this;
- }
-
- /* Q3AutoObject<T> operator=(T rhs) // use explicit casts instead
- {
- Assert_(rhs==nil || ::Q3Object_IsType(rhs, kQ3ObjectTypeShared) == kQ3True);
- if (mObject != rhs) Reset(rhs);
- return this;
- }*/
-
- T Get() const { return mObject; }
- T GetRef() const
- {
- if (mObject)
- return ::Q3Shared_GetReference(mObject);
- else
- return nil;
- }
- // So we can pass this to QD3D
- operator T() const { return Get(); }
-
- T Release()
- {
- T oldObject = mObject;
- ::Q3Object_Dispose(mObject);
- mObject = nil;
- return oldObject;
- }
-
- void Reset( T inObj = nil )
- {
- if (mObject != nil)
- ::Q3Object_Dispose(mObject);
- mObject = inObj;
- }
-
- private:
- TQ3Object mObject;
- };
-